package chapter07

/**
  * create by undeRdoG on  2021-06-06  0:14
  * 凡心所向，素履以往，生如逆旅，一苇以航。
  */
object Test15_HighLevelFunction_Reduce {

  def main(args: Array[String]): Unit = {
    val list = List(1, 2, 3, 4)

    //reduce  底层是 reduceLeft
    val i: Int = list.reduce((x, y) => {
      x + y
    })
    println(i)


    val list2 = List(3, 4, 5, 8, 10)
    val res2: Int = list2.reduceLeft((x, y) => x - y) // -24
    val res3: Int = list2.reduceRight((x, y) => x - y) //  10-(8-(5-(4-3)))

    println(res2)
    println(res3)



    // fold   传入两个参数：初始值   以及  操作方法  比reduce 多一个初始化参数
    println(list.fold(10)(_ + _))


    /**
      * 对于 reduce来说，初始值就是传入的第一个数
      * 而对于 fold  初始值需要显式的传入
      *
      **/
  }
}
